From 2e3866b5b2cd727fdd68e51ddb766e736ac59900 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Wed, 1 Jul 2009 19:50:49 +0200 Subject: [PATCH] Make GdkDrawable draw_drawable backwards compat Turns out pygtk build broke due to the argument addition to draw_drawable. So, we now add a new vfunc for the new draw_drawable and are thus backwards compat. --- gdk/gdkdraw.c | 22 +++++++++++++++------- gdk/gdkdrawable.h | 15 ++++++++++++--- gdk/gdkoffscreenwindow.c | 2 +- gdk/gdkpixmap.c | 2 +- gdk/gdkwindow.c | 2 +- gdk/quartz/gdkdrawable-quartz.c | 2 +- gdk/win32/gdkdrawable-win32.c | 2 +- gdk/x11/gdkdrawable-x11.c | 2 +- 8 files changed, 33 insertions(+), 16 deletions(-) diff --git a/gdk/gdkdraw.c b/gdk/gdkdraw.c index ad0af7989a..b0ed2aeea9 100644 --- a/gdk/gdkdraw.c +++ b/gdk/gdkdraw.c @@ -668,13 +668,21 @@ gdk_draw_drawable (GdkDrawable *drawable, windows. We should clip that and (for windows with bg != None) clear that area in the destination instead. */ - GDK_DRAWABLE_GET_CLASS (drawable)->draw_drawable (drawable, gc, - composite_impl, - xsrc - composite_x_offset, - ysrc - composite_y_offset, - xdest, ydest, - width, height, - src); + if (GDK_DRAWABLE_GET_CLASS (drawable)->draw_drawable_with_src) + GDK_DRAWABLE_GET_CLASS (drawable)->draw_drawable_with_src (drawable, gc, + composite_impl, + xsrc - composite_x_offset, + ysrc - composite_y_offset, + xdest, ydest, + width, height, + src); + else /* backwards compat for old out-of-tree implementations of GdkDrawable (are there any?) */ + GDK_DRAWABLE_GET_CLASS (drawable)->draw_drawable (drawable, gc, + composite_impl, + xsrc - composite_x_offset, + ysrc - composite_y_offset, + xdest, ydest, + width, height); g_object_unref (composite); } diff --git a/gdk/gdkdrawable.h b/gdk/gdkdrawable.h index 21af0d1dc8..44beaf7fdd 100644 --- a/gdk/gdkdrawable.h +++ b/gdk/gdkdrawable.h @@ -105,8 +105,7 @@ struct _GdkDrawableClass gint xdest, gint ydest, gint width, - gint height, - GdkDrawable *original_src); + gint height); void (*draw_points) (GdkDrawable *drawable, GdkGC *gc, GdkPoint *points, @@ -210,6 +209,17 @@ struct _GdkDrawableClass int width, int height); + void (*draw_drawable_with_src) (GdkDrawable *drawable, + GdkGC *gc, + GdkDrawable *src, + gint xsrc, + gint ysrc, + gint xdest, + gint ydest, + gint width, + gint height, + GdkDrawable *original_src); + /* Padding for future expansion */ void (*_gdk_reserved7) (void); void (*_gdk_reserved9) (void); @@ -219,7 +229,6 @@ struct _GdkDrawableClass void (*_gdk_reserved13) (void); void (*_gdk_reserved14) (void); void (*_gdk_reserved15) (void); - void (*_gdk_reserved16) (void); }; struct _GdkTrapezoid diff --git a/gdk/gdkoffscreenwindow.c b/gdk/gdkoffscreenwindow.c index 8a020bbe60..438cc0c1a7 100644 --- a/gdk/gdkoffscreenwindow.c +++ b/gdk/gdkoffscreenwindow.c @@ -1224,7 +1224,7 @@ gdk_offscreen_window_class_init (GdkOffscreenWindowClass *klass) drawable_class->draw_polygon = gdk_offscreen_window_draw_polygon; drawable_class->draw_text = gdk_offscreen_window_draw_text; drawable_class->draw_text_wc = gdk_offscreen_window_draw_text_wc; - drawable_class->draw_drawable = gdk_offscreen_window_draw_drawable; + drawable_class->draw_drawable_with_src = gdk_offscreen_window_draw_drawable; drawable_class->draw_points = gdk_offscreen_window_draw_points; drawable_class->draw_segments = gdk_offscreen_window_draw_segments; drawable_class->draw_lines = gdk_offscreen_window_draw_lines; diff --git a/gdk/gdkpixmap.c b/gdk/gdkpixmap.c index e9f33aa847..3d29805770 100644 --- a/gdk/gdkpixmap.c +++ b/gdk/gdkpixmap.c @@ -203,7 +203,7 @@ gdk_pixmap_class_init (GdkPixmapObjectClass *klass) drawable_class->draw_polygon = gdk_pixmap_draw_polygon; drawable_class->draw_text = gdk_pixmap_draw_text; drawable_class->draw_text_wc = gdk_pixmap_draw_text_wc; - drawable_class->draw_drawable = gdk_pixmap_draw_drawable; + drawable_class->draw_drawable_with_src = gdk_pixmap_draw_drawable; drawable_class->draw_points = gdk_pixmap_draw_points; drawable_class->draw_segments = gdk_pixmap_draw_segments; drawable_class->draw_lines = gdk_pixmap_draw_lines; diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c index d15b660f78..cda7e83207 100644 --- a/gdk/gdkwindow.c +++ b/gdk/gdkwindow.c @@ -419,7 +419,7 @@ gdk_window_class_init (GdkWindowObjectClass *klass) drawable_class->draw_polygon = gdk_window_draw_polygon; drawable_class->draw_text = gdk_window_draw_text; drawable_class->draw_text_wc = gdk_window_draw_text_wc; - drawable_class->draw_drawable = gdk_window_draw_drawable; + drawable_class->draw_drawable_with_src = gdk_window_draw_drawable; drawable_class->draw_points = gdk_window_draw_points; drawable_class->draw_segments = gdk_window_draw_segments; drawable_class->draw_lines = gdk_window_draw_lines; diff --git a/gdk/quartz/gdkdrawable-quartz.c b/gdk/quartz/gdkdrawable-quartz.c index be08c7db64..b4b1e0364a 100644 --- a/gdk/quartz/gdkdrawable-quartz.c +++ b/gdk/quartz/gdkdrawable-quartz.c @@ -661,7 +661,7 @@ gdk_drawable_impl_quartz_class_init (GdkDrawableImplQuartzClass *klass) drawable_class->draw_polygon = gdk_quartz_draw_polygon; drawable_class->draw_text = gdk_quartz_draw_text; drawable_class->draw_text_wc = gdk_quartz_draw_text_wc; - drawable_class->draw_drawable = gdk_quartz_draw_drawable; + drawable_class->draw_drawable_with_src = gdk_quartz_draw_drawable; drawable_class->draw_points = gdk_quartz_draw_points; drawable_class->draw_segments = gdk_quartz_draw_segments; drawable_class->draw_lines = gdk_quartz_draw_lines; diff --git a/gdk/win32/gdkdrawable-win32.c b/gdk/win32/gdkdrawable-win32.c index e6c7e45ef7..d5a4376b85 100644 --- a/gdk/win32/gdkdrawable-win32.c +++ b/gdk/win32/gdkdrawable-win32.c @@ -180,7 +180,7 @@ gdk_drawable_impl_win32_class_init (GdkDrawableImplWin32Class *klass) drawable_class->draw_polygon = gdk_win32_draw_polygon; drawable_class->draw_text = gdk_win32_draw_text; drawable_class->draw_text_wc = gdk_win32_draw_text_wc; - drawable_class->draw_drawable = gdk_win32_draw_drawable; + drawable_class->draw_drawable_with_src = gdk_win32_draw_drawable; drawable_class->draw_points = gdk_win32_draw_points; drawable_class->draw_segments = gdk_win32_draw_segments; drawable_class->draw_lines = gdk_win32_draw_lines; diff --git a/gdk/x11/gdkdrawable-x11.c b/gdk/x11/gdkdrawable-x11.c index 9a69a3bb10..537a47e0fb 100644 --- a/gdk/x11/gdkdrawable-x11.c +++ b/gdk/x11/gdkdrawable-x11.c @@ -160,7 +160,7 @@ _gdk_drawable_impl_x11_class_init (GdkDrawableImplX11Class *klass) drawable_class->draw_polygon = gdk_x11_draw_polygon; drawable_class->draw_text = gdk_x11_draw_text; drawable_class->draw_text_wc = gdk_x11_draw_text_wc; - drawable_class->draw_drawable = gdk_x11_draw_drawable; + drawable_class->draw_drawable_with_src = gdk_x11_draw_drawable; drawable_class->draw_points = gdk_x11_draw_points; drawable_class->draw_segments = gdk_x11_draw_segments; drawable_class->draw_lines = gdk_x11_draw_lines; -- 2.30.2